package cachex

import "gitee.com/zhongguo168a/gocodes/datax"

// 更新对象
// 如果data为nil，则设置对象为nil
// 如果data[key]为nil, 则设置对象为nil
func (s *Object) RefUpdate(data map[string]interface{}) {
	s.mutex.Lock()
	s.refUpdate(data)
	s.mutex.Unlock()
}
func (s *Object) refUpdate(data map[string]interface{}) {
	if data == nil {
		s.refSetNil()
		return
	}
	if s.data == nil {
		s.data = datax.M{}
	}
	sdata := s.data
	for field, val := range data {
		sval := sdata[field]
		if sval == nil {
			_ = s.refSet(sdata, field, val)
		} else {
			obj, isObject := sval.(IObject)
			if isObject {
				if val == nil {
					obj.refUpdate(nil)
				} else {
					obj.refUpdate(val.(datax.M))
				}
			} else {
				_ = s.refSet(sdata, field, val)
			}
		}
	}
}
